package com.lantosec.hmrp.modules.sysdata.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lantosec.hmrp.core.kit.PageVO;
import com.lantosec.hmrp.modules.sysdata.entity.SysDataProcess;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lantosec.hmrp.modules.sysdata.vo.ProcessInstanceStatisticsVO;
import com.lantosec.hmrp.modules.workflow.vo.SysDataProcessQueryVO;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 系统数据流程关联表 服务类
 * </p>
 *
 * @author AutoCode
 * @since 2020-03-10
 */
public interface ISysDataProcessService extends IService<SysDataProcess> {

    /**
     * 保存流程
     *
     * @param formTableId   表单Id
     * @param proInsId      流程实例Id
     * @param proInsName    流程实例名称
     * @param dataId        数据记录Id
     * @param currentTaskId 当前任务节点Id
     * @return
     */
    boolean saveProcess(String formTableId, String proInsId, String proInsName, String dataId, String currentTaskId);

    /**
     * 添加流程
     */
    boolean insertProcess(String formTableId, String processDefinitionId, String deploymentId, String proInsId, String proInsName, String dataId, String currentTaskId
            , String currentTaskKey, String currentTaskName, String startUserId, String processType);

    /**
     * 更新流程的当前任务节点Id，完成时间
     */
    boolean updateProcess(String proInsId, String currentTaskId, String currentTaskKey, String currentTaskName, Date finishTime
            , String processStatus, String formTableId);

    /**
     * 根据用户Id查询
     *
     * @param page
     * @param userId
     * @return
     */
    Page<SysDataProcess> selectByStartUserId(PageVO page, String userId);

    List<SysDataProcess> selectByStartUserId(String userId);

    /**
     * 查询流程实例数量
     * @param condition 查询条件
     * @return
     */
    long queryProcessInstanceCount(SysDataProcessQueryVO condition);

    /**
     * 查询流程实例列表
     * @param condition 查询条件
     * @return
     */
    Page<SysDataProcess> queryProcessInstanceList(PageVO<SysDataProcess> page, SysDataProcessQueryVO condition);

    /**
     * 根据流程分类Id分组统计流程实例数量
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return
     */
    List<ProcessInstanceStatisticsVO> queryProcessInstanceStatistics(String startTime, String endTime);

    /**
     * 根据流程部署Id删除
     * @param deploymentId  部署Id
     */
    int deleteByDeploymentId(String deploymentId);

    /**
     * 查询我发起的流程数量
     *
     * @param userId 用户Id
     * @return 返回数量
     */
    long countStartProcess(String userId);
}
